//1. 原地移除数组中所有的元素val，要求时间复杂度为O(N)，空间复杂度为O(1)。
int removeElement(int* nums, int numsSize, int val) {
    int s = 0; 
    int x = 0;
    for(s=0;s<numsSize;s++)
    {
        if(nums[s]!=val)
        {
            nums[x]=nums[s];
            x++;
        }
    }
       return x; 
    }

//2. 删除排序数组中的重复项。

int removeDuplicates(int* nums, int numsSize) {
    int s=0;
    int x=0;
    for(int s=1;s<numsSize;s++)
    {
      if(nums[s]!=nums[x])
      {
          x++;
          nums[x]=nums[s];
    
      }
    }
    return x+1;
  }

//3. 合并两个有序数组。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    int s=m-1;
    int x=n-1;
    int i=nums1Size-1;
    while(s>=0&&x>=0)
    {
        if(nums1[s]<nums2[x])
        {
            nums1[i]=nums2[x];
            x--;
        }
        else
        {
            nums1[i]=nums1[s];
            s--;
        }
        i--;
        
    } 
    while(x>=0)
    {
        nums1[i]=nums2[x];
        x--;
        i--;
    }
    }

//4. 旋转数组。
void reverse (int* arr,int start,int end)
{
    
    while(start<end)
    {
        int tmp = arr[start];
        arr[start] = arr[end];
        arr[end] = tmp;
        start++;
        end--;
    }
}

void rotate(int* nums, int numsSize, int k) 
{
    k = k % numsSize;
    reverse(nums,0,numsSize-1);
    reverse(nums,0,k-1);
    reverse(nums,k,numsSize-1);
}

//5. 数组形式的整数加法

int* addToArrayForm(int* A, int ASize, int k, int* returnSize) {
    int knum=k;
    int ksize =0;
    
    while(knum)
    {
        ksize++;
        knum/=10;
    }
    int len=ASize>ksize?ASize:ksize;
    int* retArr =(int*)malloc(sizeof(int)*(len+1));
    int Ai=ASize-1;
    int reti=0;
    int nextnum=0;
    while(len--)
    {
        int a=0;
        if(Ai>=0)
        {
            a=A[Ai];
            Ai--;
        }
        int ret = a+k%10+nextnum;
        k/=10;
        if(ret>9)
        {
            ret-=10;
            nextnum=1;
        }
        else
        {
            nextnum=0;
        }

        retArr[reti]=ret;
        reti++ ;
    }
    if(nextnum==1)
    {
        retArr[reti]=1;
        ++reti;
    }
    int start=0;
    int end=reti-1;
    while(start<end)
    {
        int tmp=retArr[end];
        retArr[end]=retArr[start];
        retArr[start]=tmp;
        start++;
        end--;
    }

    *returnSize=reti;
    return retArr;
}




